// 所有比较运算符结果均返回布尔值。

console.log(10 > 5) // true
console.log(10 < 5) // false
console.log(10 >= 10) // true

// ************************************************************

// 字符串比较：字符串是按字符（母）逐个进行比较的。

console.log('Z' > 'A') // true
console.log('Glow' > 'Glee') // true
console.log('Bee' > 'Be') // true

// 字符串比较算法：
// 1. 首先比较两个字符串的第一个字符，则该字符串大于（或小于）另一个字符串，算法结束，返回结果。
// 2. 否则，如果两个字符串的首位相等，则继续取出两个字符串各自的后一位字符进行比较。
// 3. 重复上述步骤，知道比较完成字符串的所有字符为止。
// 4. 如果两个字符串同时用完，则判断它们相等；否则未结束（还有未比较的字符）的字符串更大。

// ************************************************************

// 不同类型值间的比较：当对不同类型的值进行比较时，JS 会首先将其转化为数字(number)再判定大小。
console.log('10' > 2) // true 会先将 '10' 转化为 10，再进行比较。
console.log('01' == 1) // true 字符串 '01' 转化为数字 1。

// 【严格相等】=== 在进行比较式不会做任何的类型的转换。
console.log(0 == false) // true false 会转为 0 后在进行比较
console.log(0 === false) // false

// ************************************************************

// null 和 undefined 进行比较。在非严格相等 == 下，null 和 undefined 相等且各自不等于任何其他的值（不包含 null 和 undefined 自身）。
// 当使用数学式或其他比较方法 < > <= >= 时：null/undefined 会被转化为数字：null 被转化为 0，undefined 被转化为 NaN。
console.log(null == null) // true
console.log(undefined == undefined) // true
console.log(null == undefined) // true
console.log(null == 0) // false
console.log(null >= 0) // true 非 == 比较下，null 和 undefined 还是会转成 number 类型。

// ************************************************************

// NaN 是一个特殊的数值型值，它与任何值进行比较都会返回 false（包括自身）。
console.log(NaN == NaN) // false
console.log(NaN === NaN) // false
